#ifndef A_STAR_HPP
#define A_STAR_HPP

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include "BasePathfindingAlgorithm.hpp"

#include <SmegTools/Debug/DebugNew.hpp>

namespace smeg {
    namespace ai {
////////////////////////////////////////////////////////////
/// Base class for Pathfinding algorithm
////////////////////////////////////////////////////////////
class AStar : public BasePathfindingAlgorithm
{
public:
    ////////////////////////////////////////////////////////////
    /// Constructor/Destructor
    ////////////////////////////////////////////////////////////
                                AStar( Grid* _pGrid );
    virtual                     ~AStar();

    ////////////////////////////////////////////////////////////
    /// Find a path between start and end
    ///
    /// \param _Start : Start point 
    /// \param _End :   End point 
    ///
    ////////////////////////////////////////////////////////////
    virtual const std::vector< sf::Vector2f >& FindPath( const sf::Vector2f& _Start, const sf::Vector2f& _End );

protected:
    ////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////
                                AStar();

#ifdef _DEBUG
public:
    bool                        DebugStartPath( const sf::Vector2f& _Start, const sf::Vector2f& _End );
    bool                        DebugStepPath( const sf::Vector2f& _Start, const sf::Vector2f& _End );
#endif
};

    } // namespace ai
} // namespace smeg

#include <SmegTools/Debug/DebugNewOff.hpp>

#endif // A_STAR_HPP
